package com.sziit.jwh.firstactivity
// 导入所需的各种包，包括 Android 系统相关、Jetpack Compose 相关的包
import android.content.res.Configuration
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.Image
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.sziit.jwh.firstactivity.ui.theme.FirstActivityTheme

// 主活动类，继承自 ComponentActivity，用于处理应用的生命周期等
class MainActivity : ComponentActivity() {
    // 重写 onCreate 方法，在活动创建时调用
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 设置应用的界面内容，使用 Jetpack Compose 构建界面
        setContent {
            // 使用 FirstActivityTheme 主题包装界面内容
            FirstActivityTheme {
                // Surface 组件，用于创建一个具有背景、阴影等效果的容器
                Surface {
                    // 获取示例数据中的消息列表
                    val messages = SampleData.conversationSample
                    // 调用 Conversation 函数，展示消息列表
                    Conversation(message = messages)
                }
            }
        }
    }
}

// 定义一个数据类 Message，用于存储消息的作者和内容
data class Message(val author: String, val body: String)

// 可组合函数，用于展示单个消息卡片
@Composable
fun MessageCard(msg: Message) {
    // 使用 Row 布局容器，使子组件水平排列，并添加内边距
    Row(modifier = Modifier.padding(all = 8.dp)) {
        // Image 组件，用于显示联系人头像
        Image(
            // 从资源中获取图片绘制器，指定图片资源为 R.drawable.xiaoxin
            painter = painterResource(R.drawable.xiaoxin),
            // 为图片添加无障碍描述，方便视障用户理解
            contentDescription = "liz的图片",
            // 设置图片的修饰符，包括大小、裁剪为圆形、添加边框
            modifier = Modifier
                .size(40.dp)
                .clip(CircleShape)
                .border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape)
        )

        // 添加水平间隔，宽度为 8dp
        Spacer(modifier = Modifier.width(8.dp))

        // 使用 remember 和 mutableStateOf 创建一个可变状态，用于控制消息内容的展开/折叠
        var isExpanded by remember { mutableStateOf(false) }

        // 使用 Column 布局容器，使子组件垂直排列，并添加点击事件以切换展开/折叠状态
        Column(modifier = Modifier.clickable { isExpanded = !isExpanded }) {
            // Text 组件，显示消息的作者，设置颜色和文本样式
            Text(
                text = msg.author,
                color = MaterialTheme.colorScheme.secondary,
                style = MaterialTheme.typography.titleSmall
            )

            // 添加垂直间隔，高度为 4dp
            Spacer(modifier = Modifier.height(4.dp))

            // Surface 组件，包裹消息正文，设置形状和阴影效果
            Surface(
                shape = MaterialTheme.shapes.medium,
                shadowElevation = 1.dp,
            ) {
                // Text 组件，显示消息正文，根据展开/折叠状态设置最大行数，并添加内边距和文本样式
                Text(
                    text = msg.body,
                    modifier = Modifier.padding(all = 4.dp),
                    maxLines = if (isExpanded) Int.MAX_VALUE else 1,
                    style = MaterialTheme.typography.bodyMedium
                )
            }
        }
    }
}

// 可组合函数，用于展示消息列表
@Composable
fun Conversation(message: List<Message>) {
    // 使用 LazyColumn 实现懒加载的列表，提高性能
    LazyColumn {
        // 使用 items 函数遍历消息列表，并为每个消息项调用 MessageCard 函数进行展示
        items(message) { msg ->
            MessageCard(msg)
        }
    }
}

// 定义一个对象 SampleData，用于存储示例数据
object SampleData {
    // 定义一个消息列表，包含几条示例消息
    val conversationSample = listOf(
        Message("Android", "Jetpack Compose"),
        Message("User", "Hello, World!"),
        Message("Bot", "How can I help you?How can I help you?" +
                "How can I help you?How can I help you?How can I help you?How can I help you?" +
                "How can I help you?How can I help you?How can I help you?" +
                "How can I help you?How can I help you?How can I help you?")
    )
}

// 浅色模式的预览注解，用于在 Android Studio 的预览窗口中显示浅色模式下的界面效果
@Preview(name = "Light Mode")
// 深色模式的预览注解
//@Preview(
//    uiMode = Configuration.UI_MODE_NIGHT_YES,
//    showBackground = true,
//    name = "Dark Mode"
//)
// 可组合函数，用于在预览中展示消息列表的界面效果
@Composable
fun PreviewMessageCard() {
    // 使用 FirstActivityTheme 主题包装界面内容
    FirstActivityTheme {
        // Surface 组件，用于创建一个具有背景、阴影等效果的容器
        Surface {
            // 获取示例数据中的消息列表
            val messages = SampleData.conversationSample
            // 调用 Conversation 函数，展示消息列表
            Conversation(message = messages)
        }
    }
}